c/c++常见类型转换错误

您所在的位置:网站首页 c语言 强制类型转换 c/c++常见类型转换错误

c/c++常见类型转换错误

2024-05-31 12:46| 来源: 网络整理| 查看: 265

文章目录 char转int 高位符号扩展有符号int与无符号int比较关于一个bit的位域变量的取值范围临时变量溢出size_t死循环

char转int 高位符号扩展 int main() { char a = 0x9A; int util; util = (int)a; cout std::cout std::cout int d = -1; int array[] = {23, 23, 23}; cout cout 23, 23, 23}; cout cout return 1; } int main() { xxdata test; test.flag = status(); if (test.flag == 1) { cout int flag: 1; int other: 31; } xxdata; int status() { return -1; } int main() { xxdata test; test.flag = status(); if (test.flag == -1) { cout long score; score = m * n; return score; }

在64位操作系统下,int型通常占4个字节,long型通常占8个字节,两个int型变量相乘的值范围是long型变量的值范围。score=m*n 这行代码在执行时,m和n相乘的结果会先存储在一个临时的int变量中,然后再赋值给long变量score,这个临时变量是很容易溢出的。所以,需要在表达式运算前先对m和n做数据类型转换。

正确做法:

long mul(int m, int n) { long score; score = static_cast(m) * static_cast(n); return score; }

对隐式的类型转换,一般来说向上是安全的,向下会出现数据截断丢失,导致数据错误。事实上,上述正确代码只在long型字节数是int型字节数两倍的情况下才是正确的,如果在某些平台下,long 型和int 型字节数一样的话(如32 位操作系统int型和long型通常都占4个字节),仍然需要注意两个int型相乘结果溢出的问题。

size_t死循环 int main() { size_t size = sizeof(int); cout if (size == 0) break; }

2、使用int替代size_t



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3